cmake_minimum_required (VERSION 3.12)
#################################### GenTL ####################################
# static library wrapping a GenTL producer (cti) as dynamic loadable library  #
###############################################################################

################### Variables ####################
# Change if you want modify path or other values #
##################################################
# library version
set(GENTL_VERSION "1.0.1")
# shared library name
set(GENTL_NAME genTL)

################# Files #################
#   Define files and paths to project.  #
#########################################
# download official GenTL header file
include(FetchContent)

# version 1.5
FetchContent_Declare(download_gentl_h
URL https://www.emva.org/wp-content/uploads/GenTL_v1_5.h
URL_HASH SHA256=d408e9ebdb8f4dfeaf99aae40f90f7b85af7332f5d0bf53d0ac35111edc717fd
DOWNLOAD_NO_EXTRACT true
)
FetchContent_MakeAvailable(download_gentl_h)
file(COPY_FILE ${download_gentl_h_SOURCE_DIR}/GenTL_v1_5.h ${download_gentl_h_SOURCE_DIR}/GenTL.h)

# version 1.6
#include(FetchContent)
#FetchContent_Declare(download_gentl_h
#URL https://www.emva.org/wp-content/uploads/GenTL_v1_6.zip
#URL_HASH SHA256=48c0867219c4d04a968a27e740d81068fae08b6ab94c9834b221530d941bb4d1
#)
#FetchContent_MakeAvailable(download_gentl_h)

message("download_gentl_h_SOURCE_DIR: ${download_gentl_h_SOURCE_DIR}")

file(GLOB GENTL_SRC_FILES
    "src/GTL_Producer.cpp"
)

file(GLOB GENTL_PUBLIC_HEADER_FILES
    "${CMAKE_CURRENT_SOURCE_DIR}/inc/GTL_Producer.hpp"
    "${download_gentl_h_SOURCE_DIR}/GenTL.h"
)

set(GENTL_DL_PRIVATE_INCLUDE_PATH 
    ${CMAKE_CURRENT_SOURCE_DIR}/src 
)
set(GENTL_DL_PUBLIC_INCLUDE_PATH 
    ${CMAKE_CURRENT_SOURCE_DIR}/inc 
    ${download_gentl_h_SOURCE_DIR}
)


####################### Target #######################
#   Define target library and configure properties   #
######################################################
# Static library
add_library(${GENTL_NAME} STATIC
    ${GENTL_SRC_FILES}
    ${GENTL_PUBLIC_HEADER_FILES}
)

set_target_properties(${GENTL_NAME} PROPERTIES 
    POSITION_INDEPENDENT_CODE ON
    VERSION ${GENTL_VERSION}
    SOVERSION  ${GENTL_VERSION}
    PUBLIC_HEADER "${GENTL_PUBLIC_HEADER_FILES}"
    CXX_VISIBILITY_PRESET hidden
)

target_include_directories(${GENTL_NAME} PUBLIC ${GENTL_DL_PUBLIC_INCLUDE_PATH} PRIVATE ${GENTL_DL_PRIVATE_INCLUDE_PATH})
